package objetos;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;




public class GerenciaInimigo extends Sprite{

	public int velocidade = 1;
	public int velocidadeNegativa = -1;
	public int distancia = 50;
	
	
	
	BufferedImage charset = null;
	int charx = 0;
	int chary = 0;
	
	int numDireita = 2, numEsquerda = 1; // default do dinossauro 2 e 1
	
	int frame = 0;
	int animspd = 100;
	int somatimeanim = 0;
	
	int vida = 100;
	
	int forcaDano, defesa;
	
	
	ArrayList<Inimigo> ListaInimigo = new ArrayList<Inimigo>();
	
	ArrayList<Boolean> verificaColicoes = new ArrayList<Boolean>();
	
	int unidadeTamanhoSpritX,unidadeTamanhoSpritY, spritNumColunasX, spritNumLinhasY;
	
	int contY=0;
	
	int anim;
	
	int evento;
	int modoEvento; // ativo ou inativo
		
	public boolean paraDireita = true, paraEsquerda = false, iniciar = true, start = false;
	
	public long duracaoMovimento;
	
	boolean colidiu = true;
		
	public int tempoDuracaoPorCiclo = 100;
	
	BufferedImage imagem;
		
	
	public GerenciaInimigo() {
		// TODO Auto-generated constructor stub
	}

	
   public void addInimigo(float x, float y, BufferedImage charset, int charx,
			int chary, int numDireita, int numEsquerda, int quantidadeTempoPercorrer, int unidadeTamanhoSpritX, int unidadeTamanhoSpritY, int spritNumColunasX, 
			int spritNumLinhasY, int vida, int forcaDano, int defesa, int evento, int modoEvento){
	  
	   Inimigo novoInimigo = new Inimigo(x, y, charset, charx, chary, numDireita, numEsquerda, quantidadeTempoPercorrer, unidadeTamanhoSpritX, unidadeTamanhoSpritY, spritNumColunasX, 
				spritNumLinhasY, vida, forcaDano, defesa, evento, modoEvento);
	   
	   ListaInimigo.add(novoInimigo);
	  
   }
	
	
	@Override
	public void SimulaSe(long diftime) {
		//System.out.println("\n GerenciaInimigo::Simulase >> size lista inimigos >>"+ListaInimigo.size()+"");
		for(Inimigo inimigo: ListaInimigo){
			if(inimigo.modoEvento > 0){ // maior que zero quer disser que ele esta ativo
				inimigo.SimulaSe(diftime);
			
				for(Caixa caixa:CanvasGame.instance.boxPush.listaBoxPush){
					
					if(caixa.colisaoRetangular(inimigo, diftime)){
						//System.out.println("GerenciaInimigo::Simulase::INIMIGO COLIDIU COM A CAIXAAAA");
																		
						if(caixa.Y < inimigo.Y){
							inimigo.vivo = false;
						}
					}
				}
			}
			
		}
		
		try {
			for(Inimigo inimigo: ListaInimigo){
				//System.out.println("/nGerenciaInimigo::Simulase:: inimigo.vivo >> "+inimigo.vivo+"");
				//System.out.println("/nGerenciaInimigo::Simulase:: inimigo.modoEvento >> "+inimigo.modoEvento+"");
				//System.out.println("/nGerenciaInimigo::Simulase:: inimigo.X >> "+inimigo.X+" inimigo.Y = "+inimigo.Y+"");
				if(inimigo.vivo == false){
					ListaInimigo.remove(inimigo);
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		
		
		
	}

	@Override
	public void DesenhaSe(Graphics2D dbg, int mapx, int mapy) {

		for(Inimigo inimigo: ListaInimigo){
			if(inimigo.modoEvento > 0){
				inimigo.DesenhaSe(dbg, mapx, mapy);
			}
		}
	}
	
	public boolean colisaoRetangular(Heroi p) {
		colidiu = false;
		for (int i = 0; i < ListaInimigo.size(); i++) {
			
		if( ListaInimigo.get(i).modoEvento > 0){
				colidiu = true;		
			
		if (p.X + 32 < ListaInimigo.get(i).X) {
			colidiu = false;
		}
		if (p.X > ListaInimigo.get(i).X + ListaInimigo.get(i).unidadeTamanhoSpritX) {
			colidiu = false;
		}
		if (p.Y + 48 < ListaInimigo.get(i).Y) {
			colidiu = false;
		}
		if (p.Y > ListaInimigo.get(i).Y +ListaInimigo.get(i).unidadeTamanhoSpritY) {
			colidiu = false;
		}
		
		if(colidiu == true){
			forcaDano = ListaInimigo.get(i).forcaDano; // pega a forca dano atual que colidiu
			return true;
		}
		
			}
		
		
		}
		
		if(colidiu == false){
			return false;
		}else{
			return true;
		}

		
	}

}
